import StructureData from './数据结构中的通用方法'
class PriorityQueue<T> extends StructureData{
    arr:Array<T>
    type:boolean
    constructor(arr: Array<T> = new Array<T>(),type:boolean = true){
        super()
        this.arr = arr;
    }
    // 实现大根堆方法
    maxHeap(index:number){
        while(this.arr[index] > this.arr[Math.floor((index-1)/2)]){
            this.swap(this.arr,index,Math.floor((index-1)/2))
            index = Math.floor((index-1)/2)
        }
    }
    // 实现最小堆方法
    minHeap(index: number){
        while(this.arr[index] < this.arr[Math.floor((index-1)/2)]){
            this.swap(this.arr,index,Math.floor((index-1)/2))
            index = Math.floor((index-1)/2)
        }
    }
    // 
    // 添加数据方法
    add(value:T){
        this.arr.push(value)
        for(let i = 0; i < this.arr.length; i++){
            this.minHeap(i)
        }
    }
    // 取出优先队列中根节点的数字
    poll():T {
        return this.arr.shift()
    }
    // 判断优先队列中是否为空
    isEmpty():boolean {
        return this.arr.length === 0
    }
    // 读取优先队列中的数据
    getPriorityQueueData():Array<T>{
        return this.arr
    }
}
export default PriorityQueue
